package com.merry.spring5.annotation;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import com.merry.spring5.annotation.bean.Tissue;

/**
 * @author ybzou
 * 注解注入的类
 *      注解：@Autowired中有一个属性 required=true 默认为true。意思是这个被注入的bean是否是必须的。为true就是容器中必须要有一个Tissue类型的bean对象，否则就会报错。
 *              如果只使用@Autowired注解进行注入，那么需要保证该容器中被注入的对象是单实例的，否则会报错，这是因为autowired注解默认是使用byType的方式进行注入的。
 *          `@Qualifier：有一个value属性，指定注入bean的名字，也就是byName，按照名称注入。
 *          `@Resource：这是J2EE中定义的注解。
 */
@Component(value = "autowiredTissue")
public class AutowiredTissue {

    //第一种方式：属性注入
//    @Autowired
    Tissue tissue;

    public Tissue getTissue() {
        return tissue;
    }

    //第二种方式：setter 方法注入
    @Autowired
    public void setTissue(Tissue tissue) {
        this.tissue = tissue;
    }

    //第三种方式：构造方法注入。第四种方式：形参上注入。类似与之前的方式。
    //第五种方式：使用Autowired+Qualifier 实现byName的方式注入。
    @Autowired
    @Qualifier(value = "tissue") // 默认是类名首字母小写。
    Tissue tissue1;
}
